import { AppConfig } from '@/config';
import { MicroAppHandler } from './micro-app-handler';

/**
 * 操作状态
 */
export interface IActionState {
	/**
	 * 标识，通常是应用代码名称
	 */
	tag: string;

	/**
	 * 行为标识
	 */
	action: string;

	/**
	 * 行为数据
	 */
	data: any;
}

/**
 * 微应用行为集
 */
export enum MicroActions {
	// 登出
	LOGOUT = 'LOGOUT',
	// 路由跳转
	ROUTELINK = 'ROUTELINK',
	// 应用初始化
	APPINIT = 'APPINIT',
}

/**
 * 基座应用行为集
 */
export enum BaseActions {
	// 菜单点击
	MENUITEMCLICK = 'MENUITEMCLICK',
	// 登出
	LOGOUT = 'LOGOUT',
}

/**
 * 全局状态
 */
export class GlobalState {

	/**
	 * 基座输入参数
	 *
	 * @private
	 * @type {*}
	 * @memberof GlobalState
	 */
	private props: any;

	/**
	 * 构造GlobalState实例
	 */
	public constructor(props: any) {
		this.props = props;
		props.onGlobalStateChange((state: any, prev: any) => {
			// 父通知子
			const currentTag = `${AppConfig.sysName}_${AppConfig.appName}`;
			if (state && state.tag && state.tag == currentTag && state !== prev) {
				MicroAppHandler.getInstance().handleAction(state);
			}
		});
	}

	/**
	 * 设置全局状态
	 *
	 * @param state
	 */
	public setGlobalState(state: IActionState) {
		if (this.props) {
			this.props.setGlobalState(state);
		}
	}
}
